/*
 * MhsTabelModel.java
 *
 * Created on June 3, 2007, 2:46 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package latihanibatis.ui;

import java.util.Vector;
import javax.swing.table.AbstractTableModel;
import latihanibatis.domain.Mahasiswa;

/**
 * Class MhsTabelModel ini adalah <strong>share</strong> TableModel untuk
 * class <code>TambahDasar</code> dan Class <code>EditCariDasar</code>
 * 
 * @author javamaniac
 */
public class MhsTabelModel extends AbstractTableModel {
    
    private static final int NIM        = 0;   
    private static final int NAMA       = 1; 
    private static final int ALAMAT     = 2;
    private static final int KOTA       = 3;
    private static final int KETERANGAN = 4;
    
    private final Vector<Object> recordMhs;
    private String[] headerTable;
    
    private int indexBaris;
    
    public MhsTabelModel(String[] titleTable) {
        super();
        
        setTableTitle(titleTable);
        recordMhs = new Vector<Object>();
    }
    
    /**
     * Method ini berfungsi untuk memasang <code>title</code> sebagai <code>Title</code>
     * pada <code>JTable</code>
     *
     * @param title title table yang ingin dipakai.
     */
    private void setTableTitle(String[] title) {
        this.headerTable = title;
    }
    
    public int getRowCount() {
        return recordMhs.size();
    }
    
    public int getColumnCount() {
        return headerTable.length;
    }
    
    public Object getValueAt(int baris, int kolom) {
        final Mahasiswa mhs = (Mahasiswa)recordMhs.get(baris);
        
        switch(kolom) {
            case NIM        : return mhs.getNim();
            case NAMA       : return mhs.getNama();
            case ALAMAT     : return mhs.getAlamat();
            case KOTA       : return mhs.getKota();
            case KETERANGAN : return mhs.getKeterangan();
            default: return new Object();
        }
    }
    
    public String getColumnName(final int kolom) {
        return headerTable[kolom];
    }
    
    public void addMhs(final int nim, final String nama, final String alamat,
        final String kota, final String ket) {
        
        recordMhs.addElement(new Mahasiswa(nim, nama, alamat, kota, ket));        
        fireTableRowsInserted(recordMhs.size()-1, recordMhs.size()-1);
    }
    
    // Untuk update pada JTable
    public void setBarisForUpdate(final int baris) {
        this.indexBaris = baris;
    }
    
    // Untuk update pada JTable
    public int getBarisForUpdate() {
        return indexBaris;
    }
    
    public void updateMhs(final String nama, final String alamat, final String kota, 
        final String ket, final int baris, final int kolom) {
        
        final Mahasiswa mhs = (Mahasiswa) recordMhs.get(baris);
        
        mhs.setNama(nama);
        mhs.setAlamat(alamat);
        mhs.setKota(kota);
        mhs.setKeterangan(ket);        
        
        // Beritahu ke listeners bahwa baris yang ada di [baris, kolom] mengalami
        // perubahan.
        fireTableRowsUpdated(baris, kolom);
    }
    
    public void hapusDasar(final int baris) {
        recordMhs.removeElementAt(baris);
        
        // Beritahu ke listeners bahwa baris yang ada di [baris, kolom] telah
        // terhapus.
        fireTableRowsDeleted(baris, baris);
    }
    
    public void clearTableModel() {
        recordMhs.clear();
        
        // refresh JTable.
        fireTableDataChanged();
    }
}